算法竞赛从了解入坑到快速放弃指南

您所在的位置:网站首页 算法入门 知乎 算法竞赛从了解入坑到快速放弃指南

算法竞赛从了解入坑到快速放弃指南

2024-04-18 08:50| 来源: 网络整理| 查看: 265

相关标题

大学僧算法竞赛简介及入坑指南

大学生acm-icpc算法竞赛入坑指北

算法竞赛如何从C语言入坑到转Java开发再到转算法开发

大学算法竞赛两年入坑总结

大学生搞算法竞赛的入坑大纲、刷题心态、前途、¥途、刷题心态

大学搞算法竞赛可以选择从事哪些职业

目前笔者机缘巧合下转到Python算法开发,方向是运筹算法+时序预测,矫正和补充了部分文字内容;

应私信要求给一些推荐的书籍增加了备注,大家可以点进去看下目录,就可以快速了解这个方向或者这本书的知识体系,希望可以对你有所帮助。

下面推荐的书籍,图书馆都有!图书馆都有!图书馆都有!记下名称,速度去借来,压泡面碗去吧~~

2020年10月07日

加了些文字校正,以及增加了一些书籍推荐和算法竞赛可以选择从事哪些职业的一些分析简介。

2020年05月09日

笔者在某双非大学, 曾入坑学校集训队两年,当过一年助教,带过一年的集训队管理,给新生和新集训队成员带过课;目前已退役,转JavaEE开发,在学校的电商实验室做开发。 最近回头看了看这篇我一年多前新生动员时写的文章,有大量纰漏和不足,现在已经抽空加了点图片和重新修订了一下。 2019年2月12日

如果你已经精通C语言、常用数据结构及常用算法,请自动忽略此文档。以下个人观点,可供参考。以xx双非大学大一新生小白为对象,进行分析。

笔者最高也只拿到过区域赛邀请赛的一枚铜牌、某弱省省赛铜牌银牌、天梯赛低分174分和蓝桥杯B组的省一国二, 大学之前也没有接触过C语言等计算机语言,如已达成更高的目标, 本文可忽略。

算法竞赛并不是适合所有的人,需要坚持,坚持,再坚持,半途而废的人很多很多;入门不需要太深的数学能力,毕竟我们是工科生,并非理科生;入门的话,数理化没什么大碍;但是,想要一直深入走下去,走向ICPC——数学能力十分重要、数学专业的学生优势更大;走着走着,你会发现你的对手可能就是双一流大学的、信息学竞赛保送的、花式保送的、从小学开始学起计算机语言的(直接起点比你早五六年)等等。

入坑大纲

砖家推荐以下阶段:

第一阶段,先学习《C语言程序设计》知识,OJ上的前200道题目都有配套的联系(百度搜索hdu OJ 、POJ、ZOJ、leetcode、牛客网编程都可以,自己申请一个账号即可开始刷题),掌握基础C语言语法,指针进阶和文件部分的内容可以暂时放放;有学长说一个月看完这本书就够了,笔者当时看了三个月! /捂脸

第二阶段,接着推荐《啊哈算法》,算法分析生动形象,适合缺乏抽象思维的同学;全书只用C语言描述算法——有利有弊;《啊哈算法》现在还出了一个数据结构版的教材,也很优秀,值得推荐。

《算法分析与设计》这本书也很好,这是我唯一仔仔细细看完的一本书;我在jd上淘了一个二手的,貌似是8块钱还包邮。

《算法笔记》这本书也很不错,内容详实,很适合竞赛入门知识准备(据说某高校集训队就通用的这本参考书)。

强烈推荐《挑战程序设计竞赛》这本书以及他的数据结构专题版《挑战程序设计竞赛2 算法和数据结构》。这两本书very十分超级很不错,有条件可以买下来(即使不看当枕头垫着也很舒服);图书馆也有,可以直接借来看。

作者:【ACM-ICPC全球总冠军】巫泽俊主译《挑战程序设计竞赛(第2版)》对程序设计竞赛中的基础算法和经典问题进行了汇总,分为准备篇、初级篇、中级篇与高级篇4章。作者结合自己丰富的参赛经验,对严格筛选的110 多道各类试题进行了由浅入深、由易及难的细致讲解,并介绍了许多实用技巧。每章后附有习题,供读者练习,巩固所学。

刘汝佳的书也很好——不建议能力不是很强的看,书是好,但是没有完整详细的代码解释,语言偏C++风格,这让人很捉急的,可以选看。

第三阶段,先把上面的任意一本书吃透后,再大量刷题,建立一个完整的基础的算法体系框架;可以将kuangbin的博客园的acm题集作为参考,(kuangbin大佬有模板,可以去Ta博客里下载下来,然后打印出来——每次比赛带上),依次刷完......

bin神的模板集,大概有上千页,万变不离其宗,常常可以押中比赛题目;依稀记得,当时我们四个队一起打印这份模板,把集训队的打印机给打坏了。

算法导论,成神的前夜;有余力,肝完它,区域赛金牌传说,BAT轻轻松松上岸:

数学

数学千万别拉下,诸如高数、线代、数学分析、概率论、离散数学、博弈论等课程不要拉下,尽力去学习。(你永远猜不到出题人会出什么类型的题目~~)

最新的算法论文,逃~(你永远猜不到出题人会出什么类型的题目~~)

同时,还有各种周赛、联赛、线上线下比赛可以接触到,多打打比赛才能感觉到自己的差距所在。

下面的算是后续的发展了,需要一定的积累和沉淀。

比赛 (当个赏金猎人)

百度之星程序设计大赛 (推荐)/CODEM美团编程大赛 (推荐)/牛客网线上算法有奖竞赛 (推荐)/LeetCode有奖竞赛/腾讯广告算法大赛/51NOD编程社区/阿里的天池社区.希望可以为你提供到一些帮助。

比赛时间千万不要错过了!直接百度就可以找到网址!可以提前全部关注下!

众所周知, 各大厂商或者平台时不时会举办一些线上线下的ACM/OI算法竞赛,可以为广大ACMer或OIer提供丰富的参赛奖励或者福利;这些大型线上或者线下比赛,不仅可以为各位acmer或者oier 提供一些新题型用于训练刷题, 还有丰厚的奖励也是十分诱人的,比如奖金/奖品/纪念衫/提供offer等。

枯燥无聊的刷题训练搭配上这些比赛,再叫上几个小伙伴一起愉快地AC,岂不美哉.

新生误区

小OJ(小学校的online judge系统 )上的某些题目不必深究,不必吊死在一棵歪脖子题上——先放一放换一题就是;某些题目本身就有问题,数据也可能带毒等。笔者曾深有体会,直到笔者也有OJ后台的控制权限后,才发现有很多数据真的一言难尽~~

基础题目尽量多想,实在不行就换个题目换种思路;不要急于百度找答案,不然很容易养成一遇见难题就搜答案的坏习惯;多和别人交流,在AC之后可以尝试搜搜题解,没准会有新的收获,或者会提升自己的代码技巧。多交流可以发现自己的代码不足,闭门造车不推荐(不排除你的能力真的很强,比如半年A完小oj上的大多题目)。

还有就是刷水题攀比的现象,为了名次直接百度答案复制粘贴——没什么意义;骨灰级陈学长之前强调过:“刷水题要适可而止,前200道就足够了。”我也觉得合理,之前我就在水题上刷了三四百题——后来才感觉浪费了很多系统训练的时间;提个醒,建议水题做两百道就去看书吧(按照上面的入坑大纲推荐来)。

英语不能放弃,最好从大一开始背四级词汇,背完背六级;对理解后面的英文题目有很好的帮助。推荐《百词斩》,形象生动。刷题心态

不要好高骛远(很多方面),脚踏实地,推荐的书籍最好拿准一本就一直看下去;笔者看的书不少,但认真看下去的没几本,借的书一大堆也没什么用(大多都用来睡觉枕头了)。

半途而废的童靴也不在少数,最后能陪你一直走到省赛的伙伴都很不容易;最好能拉住宿舍里的一个室友陪你一起,集体开黑敲代码刷榜单(这是多么激动人心的一件事,最新一届就是这样,一个宿舍集体刷题占榜);同机房里的人多接触,多发展一下人际关系。

嘲讽的人应该也有,不同的人生经历,不同的价值观,不同的大学观世界观,没必要事事在意别人的目光;没事别老呆在宿舍里,定好自己的目标,坚定地走下去。

我大一大多时光几乎都献给了算法竞赛,从来没有去什么景点等玩过(主要是又懒又宅),无论什么课大都常常在自学算法书,王者荣耀我都卸载了六七次(马上我会再卸载一次);无用功做了一大堆,坑也踩了一大堆,最后的省铜也是不尽人意的,几度万念俱灰,还好我坚持了下来。无非就证明了我不是什么bug并且逻辑思维和智商也不怎么出众。凡事有利也有弊,这些经历起码也磨砺了我的心智。

大二好一点,算法题刷的不怎么勤了,开始组团切lightOj,主要刷了好多图论、各种花式搜索和数据结构等等.

写博客

刷了这么多题目了,记得写博客,无论掘金、博客园、知乎专栏、gitee的博客都可以的。

一:记录自己的成长,记录自己的思路和其他独特理解,不要泛泛地只扔个题解。

二:日后,面试时可以把这个习惯写进简历中:“我在xxx博客网站连续写博客两年半,共计200余篇文章,多涉及C++、STL、算法和数据结构等,”。证明自己有实打实的竞赛经历和良好的编程意识,相反,不写博客的同学就不能通过博客证明自己。

qian途(极小概率的量子云会坍缩成现实)

ACM/ICPC国际大学生程序设计竞赛由美国计算机学会主办,是目前国际大学生计算机相关领域公认规模最大、水平最高的赛事之一,对参赛学生的学术水平和实践能力要求很高。--官方说辞。 /手动滑稽脸。 ——百度百科的acm-icpc

也就是说,通过算法竞赛里面的比赛,达到一定的名次后,你将获得进入BAT MTDP的机会;如果你不想通过算法竞赛,那么目前只有普通本科学历的你的机会只能无限趋近于0。

上面这句笔者之前写的话,笔者也不记得是哪个学长跟我说的了,还是在某个地方看到的!总之,算法竞赛的奖很好看,重点大学可能会和保研有关。之前笔者还是很赞成这句话的,现在看看倒也觉得这么认为:很多大公司只认一本以上学历,一本以下至少阿里巴巴、携程和一些认算法竞赛奖项的公司,是可以根据你的奖项来大概率给面试机会的。

算法竞赛可以提供一个很好的起步点和跳板,比如在算法开发或者操作系统底层开发专业方向来说是很有用的,以及助教或者算法教练,等等。在一线大公司的面试中,算法和数据结构能力是必考项,相对来说,搞过算法竞赛的会有巨大的优势而言,比如会有免上机笔试的优势,这一点是母庸质疑的。

通过算法竞赛,你可能将获得诸多的旅游机会,轻院是我们学校新生常去的地方,学校管接管送管吃,还有一些举办区域赛的大城市,往往是提前几天就过去——先旅游一番;算法竞赛还有很多种,比如ACM省赛区域赛、蓝桥杯省赛国赛、CCCC举办的天梯赛、CCCC的PAT单排赛、杭电的女生赛专场以及一些其他知名公司(百度阿里腾讯美团等)举办的算法竞赛,可能会有一种属于你的菜。

学校有几个实验室,老师们招人都是从集训队里挖的,或者是招退役的队员;在算法竞赛中拿几个像样的奖项,以后对你的研究生面试也是很有帮助的,导师们比较喜欢这类有代码基础很好的学生。相对来说吧,算是在计算机专业里,比起其他的普通的活动奖、组织奖、创业奖来说是很有优势的,算是很漂亮、很实用的奖了。

¥途

这个方面跟上面的不同。谈qian多俗啊,不想看的可以选择性跳过该部分内容!

引用某校的2017年的奖学金评定——“ACM程序设计竞赛获奖积分:省级以上金奖获得者,以年级专业拓展性能力最高分积分;省级以上银奖获得者,以年级专业第二名拓展性能力得分积分;省级以上铜奖获得者,以年级专业第三名拓展性能力得分积分”。你的活动分会得到保证,不挂科,不出意外——奖助学金问题不大。

新生在省级联赛的轻院新生赛和校新生赛中脱颖而出,会获得学院的奖励数百到千元的奖励,比如之前在某新生赛中拿到第一的某学长得到了千元奖励(如果我没记错的);省赛达到一定的名次也会有数千元到万的奖励,区域赛更少。

没错,区域赛更少!举例笔者的那块区域赛邀请赛铜牌,600块,一个队三个人分,又不幸被院里财务紧缺为由砍掉一半,人均100!区域赛牌子更不好拿,含金量会较于省赛更高!但区域赛对弱校学院的评建工作意义不大,起码本校报销来往路费,这一点是很不错的!

好多学校,人家出去打比赛都是自费的,自费的,来回加上住宿每个人也得小千块钱;个别高校,不拿奖就不能报销来返的费用——要倒贴的!如果你们有补助的话,记得珍惜!

敲门砖acm可以是很好的一块敲门砖,但不是唯一的敲门砖,更多更好的自己发掘

14级的XX学长曾讲了很多事例,去一些中大型公司面试的话,省赛金银奖会起到很大的作用,包括他本人就是靠着奖项进的公司(实习工资10k+);还有一个AK队的队长,就提到还有一个轻院的就是拿了省赛金奖之后就退队了---实习工资就直接稳在了7k。(可能会有偏差 /捂脸)

其实,计算机专业坑很大;笔者刚入坑的时候,以为以后的工作就是“算法+数据结构 = 程序”,搞好算法竞赛就以为搞好了一切,有点迷。

其实专业课还是很重要,计算机网络、组成原理、操作系统、数据结构、编译原理等课程都在某些方面来看是非常重要的;基础扎实,新的语言、新的领域、新的API可以快速上手,上手到精通只是时间问题,基础不扎实会走很多弯路。(面试过两家偏底层的开发岗,我因为基础不扎实,曾被评为徒有项目经验,面试的时候被PASS过两家;面试阿里也栽在这里上面(阿里面经已写),日后再写写面筋~~)

专业课不能落下,在开发日常中,除了算法竞赛中见到的程序代码(即算法和数据结构)外,还有计算机语言语法及特性(Java/C++/Python...)、SQL脚本、编译器工具、开发框架、团队协作(git)、数据库、分布式、代码规范、测试工具等等。

这个坑非常大,慢慢地就能接触到更多的东西。

就业:直接走C/C++工程师方向

参考阿里的C/C++实习生的招聘:

或许,你熟悉Unix/Linux/Win32环境下编程,并有相关开发经验,熟练使用调试工具,并熟悉某种脚本语言;或许,你熟悉网络编程和多线程编程,对TCP/IP,HTTP等网络协议有很深的理解;(基于协议的项目编程经验)或许,你享受底层技术,在kernel的源代码中纵横驰骋;

你需要至低一块区域赛银牌(铜牌比较水、没有竞争力),并且有一定的项目经验,项目经验可以是自己的毕设或者开源项目的fork,或者是大型开源项目的仿写

就业:尝试走算法工程师方向

算法涉及的范围很广泛,学历好看的话,只需打好各项计算机学科的基础,像头条、阿里、小米都有管培生,可以争取下;准备好自己的奖牌和漂亮的学历,算法管培生还是可以争取一下的。

有一些中大型公司也招零项目经验的管培生的,有赞、同花顺等,我认识的一位同事就是这么上岸算法岗的,自己多在牛客网上关注关注,寻求一些面经。

争取不到管培生,可以自学算法的某个领域,打好十分扎实的计算机课程基础,组团参加相关的大厂团体竞赛,混个奖牌,自然而然就有了项目经验。

举例机器学习领域,可以学习西瓜书《机器学习》周志华版、《机器学习实战》等书籍,具体直接在知乎上搜索 机器学习怎么入门 即可,大佬们的详细学习路线比比皆是;还有可以具体关注一个开源组织Datawhale——零基础入门机器学习的免费公益组织,github账号可以重点关注下,里面有详细的AI、数据挖掘、数据分析等科目的学习路线和小白资料。

就业:转大数据开发方向

扎实的计算机基础,扎实的一门计算机语言基础,了解Hadoop全家桶,可以搭起demo,找中大厂的管培生,如袋鼠云、奇点云等数据中台产品的厂商,日后再向外跳。

推荐尚硅谷的谷粒学院,里面的视频很新,个人白嫖过,可以免费获取整套视频。

黑马的教学视频在B站公开的也有,可以搜索一下。

推荐一本简单的书籍,大家可以点进去看看目录,就可以大致了解这个方向的知识体系:

就业:转游戏开发工程师

同上,游戏后端开发偏向Golang、Python、Erlang语言,熟悉基础语法,加上漂亮的奖牌,有简单的项目经验,找工作很简单的。

就业:转Java开发方向

实在没办法再考虑转Java开发,Java开发这个市场需求量大,但也严重过热,竞争很激烈,去各大培训班看看就知道了。推荐尚硅谷的谷粒学院,里面的视频很新,个人白嫖过,可以免费获取整套视频。黑马的教学视频在B站公开的也有,可以搜索一下。

部分个人学习完的视频,更详细的学习路线可以翻下我的历史回答

入门SE——简简单单,但是Java涉及到的领域也是十分广泛的,除了广义上的后端Web服务开发(主要指CRUD搬砖开发)细分下还有如分布式存储,搜索引擎,图数据库服务,分布式计算,网络,应用服务开发,中间件开发等。

从入门到精通,还有很的路需要走的,比如设计一个支持起亿级流量的后端服务架构,Java来搭建高并发的后端架构就再合适不过了,比如阿里巴巴的技术栈主要是围绕Java来做起来的,阿里技术体系的主要开发语言都是Java。

阿里的实习生招聘和应届生招聘都有,自己仔细看看:

个人的关于Java学习路线的回答之一:

准大四,二本校企cs,零基础,如何为Java实习做好充足准备? - 山枫叶纷飞的回答 - 知乎

推荐几个JavaEE方向的博主的博客,最近笔者也一直在学习这些博主的文章, 感兴趣的话可以看看; 他们的文章中很多都是开发日常, 还有一些程序员面试及生活文章,JavaWeb开发可能入门快,但是精通的话需要很长的路要走:

知乎、牛客网

这是两个很好的APP,大学僧都在用,你值得拥有。上面有个搜索栏,直接搜一下你的疑问——记得提炼关键词(可有效提升搜索引擎的命中率)。

百度 / Bing搜索

有什么疑问,或者不懂的知识点就上百度搜搜;比如“电脑死机了怎么办”、“醋溜白菜怎么做”、“C语言指针怎么理解”、“C语言的某个知识点怎么理解或者实例解读”、“编译器怎么用怎么调字体找设置”、“大学怎么脱单”、“python怎么安装”、“1+1为什么可以等于3”等等等。

现在起码每天都搜搜搜,工作学习的时候也都是搜搜搜;21世纪了,除了问爸妈、问同事,问搜索引擎去吧。

后记

看都看到这里了,点个赞再走呗,点个赞再走呗~~

部分为本人观点、教练的观点、学长学姐的观点(会有偏差),随便配的图;因人而异,可供借鉴,多体谅哈,希望各位提前准备、布局,少走点弯路。

铁了心要打算法竞赛,弱校弱省的话,目标最低就是蓝桥杯省一、acm省金、蓝桥杯国一,然后拿到区域赛牌;拿不到ICPC银牌,不然可能咸鱼翻了个身后还是咸鱼,这就很难受了。

感兴趣地收藏一下呗,回头可以来杠两句,随时欢迎,欢迎;如果你有队友的话,不妨把这篇文章分享出去,共勉。

后面应该会写点其他的总结或者日常段子吧,主要考虑是Java面筋、Java的一些行业知识总结、大数据开发、算法入门学习等。

笔者知乎上,还有另一篇C语言和算法竞赛的入坑指南,欢迎踩踩。

如有错误,欢迎指正!更多疑问,欢迎留言,我看到就会回答的哈。


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3